Vegetative cooling, or using plants to shield urban environments from the sun’s radiation, has been somewhat of a hot topic in recent years. There has been plenty of research done in the field of vegetative cooling for cities, such as, e.g. a 2021 Europe-wide study by Schwaab et al. (https://www.nature.com/articles/s41467-021-26768-w), or a simulation done on potential cooling effects of trees on Zurich’s Münsterhof by Kubilay et al. (https://www.mdpi.com/2073-4433/11/12/1313 ). Both of these studies find that urban trees do have at least a local cooling effect, not only due to the shade that the trees provide, but also due to other factors such as different evaporation or cool air flows as compared to asphalt or concrete surfaces. While there has been ample more research on the local effect to reduce or even eliminate heat islands, our research focuses on the question of whether or not we can identify the effect of the efforts of urban vegetative cooling in the city of Zurich on a larger scale. Furthermore, we investigate if there is any correlation with different factors in regards to air quality.
Our working hypothesis was that we can observe the cooling effects of trees on a more than hyper-local scale and that the planting of trees and the development of green spaces in an urban environment have positive correlations with the development of air quality indicators. This project tried to pinpoint the effect trees have on these indicators. The target of the presentation of results is to inform politicians, urban developers, and the public about the impact that a greener city could have on our everyday lives. While there are a number of potential factors on the local, regional, and even global scale that could have a significant influence on the local climate, this project focuses on local (i.e. on the city district level) data from the city of Zurich in regards to air quality, temperature information and the tree inventory. Further factors are described using sources, but are not included in the data analysis. To clarify our project goal and narrow it down we created the following drawing during an ideation session:
Figure 1: Target picture
The drawing depicts two potential futures for Zurich. One with more green spaces, and one with more urban wasteland. The idea of the project is to find out how much the trees and green spaces actually impact the city of Zurich in regards to temperature and air pollution, as measured on a district level using open data from general-purpose measurement stations (i.e. the data collection was in no way geared towards our analysis.)
Our data sets are limited to the trees planted by the garden services of the municipality of Zurich (Grün Stadt Zürich), and only include roadside and park trees. The effect of local de- or reforestation thus cannot be accounted for. Furthermore, temperature data was taken from roadside stations that could themselves potentially be located within heat islands. It also needs to be noted, that we did not take existing trees into account, but only looked at whether or not we could see a (lagged) correlation between newly planted trees and temperature development within the districts that our measurement stations were located in. Furthermore, as our analysis moves beyond a micro-scale, there are many more factors that we cannot control for, both on the local and macro-environmental level. A factor that we did not control for, which could have large implications on the macro scale of temperature, is the potential disappearance of undeveloped land and urban expansion. Additionally, an analysis of building materials used was also out of the scope of this analysis. The temporal scope of our data is limited to the time span between 1983 and 2022. To visualize the scope of our project, we have created a systems view that can be seen below.
Figure 2: Systems view
To ensure we include all potential stakeholders in our project at the appropriate level we created the following stakeholder map:
Figure 3: Stakeholders
We sorted them into three possible categories: “direct”, “indirect”, “unintended”. Our main target is to work together with Grün Stadt Zürich and convince politicians, the government, and urban planners on the benefits of a greener city. Indirectly involved would be municipal workers such as street sweepers, who have to deal with more leaves on the ground on the streets, and tree nurseries, which would be relied upon to provide the trees. The stakeholder map lists further stakeholders who need to be considered if the proposed changes would be implemented. It is also very possible and even likely that additional stakeholders will have to be considered during the project.
The SDGs lay out the goals that the global community (United Nations General Assembly in 2015) has agreed on. In total there are 17 goals and they range from 1. “No poverty” to 17. “Partnerships for the goals” and include social, economic and environmental targets. For our research we have identified the relevant goals and put them into the three different categories: Risk, Opportunity and Intended.
Figure 4: Sustainable Development Goals
As can be seen, the intended target for our research is to help achieve goal number 3, “Good health and well-being”. This can be achieved if we can prove a correlation between the amount of trees in a district and an improvement in air quality, which could then lead to the increase of planting of new trees in Zurich as well as a reduction of concrete wastelands in favor of green spaces. This will result in more shade and less heat islands and will, among other things, improve the quality of life of all people reacting sensitively to high temperatures. There are a number of opportunities as well in regards to climate action, economic growth, and affordable and clean energy. There are only limited risks that this project has. However it is imaginable that the improvement in air quality in certain areas could lead to a increase in inequalities between more and less affluent communities, the former of which could afford to move to the greener areas. It is our conviction that it is important to always be responsible and think of possible negative externalities and unintended consequences while planning for new green zones and planting new trees.
Our research is based on four publicly available data sets: Air quality information, two sets of temperature data, and a tree cadastre. The “Fluntern Reference Station” data set was only used for the analysis in Tableau. Following is a short overview of the different data sets:
Format: csv
Number of rows: 283’763
Number of variables: 8 (most important: date, location, type of
measurement, value)
Source: https://data.stadt-zuerich.ch/dataset/ugz_luftschadstoffmessung_stundenwerte
Format: csv
Number of rows: 4’747
Number of variables: 17 (most important: date, temperature,
location)
Source: https://opendata.swiss/de/dataset/taglich-aktualisierte-meteodaten-seit-1992
Format: csv
Number of rows: 15’706 Number of variables: 20 (most important: date,
temperature, location)
Source: https://gate.meteoswiss.ch/idaweb
Format: csv
Number of rows: 36’239
Number of variables: 17 (most important: year of planting, diameter of
crown, district)
Source: https://data.stadt-zuerich.ch/dataset/geo_baumkataster
In this step we collected the three data sets and prepared them so that they were usable in our analysis. To achieve this, certain changes to the data were necessary to facilitate an informative analysis.
First we loaded the tree cadastre data and wrangled the data to get additional information, such as the amount of trees per year and the number of trees by district.
d.trees <- read.csv('../datasets/gsz.baumkataster_baumstandorte.csv', encoding = "UTF-8")
names(d.trees)[1] <- "objid"
#head(trees)
#str(trees)
#Wrangling and mutating tree data
# trees by year
tree_ts <- d.trees %>%
dplyr::select(pflanzjahr) %>%
filter(pflanzjahr > 1980) %>%
group_by(pflanzjahr) %>%
summarise(count = n())
# Trees by district
tree_quartier <- d.trees %>%
dplyr::select(pflanzjahr, objid, quartier) %>%
filter(pflanzjahr > 1980) %>%
group_by(pflanzjahr, quartier) %>%
summarise(count = n())
# sum of trees
tree_ts_sum <- tree_ts %>%
mutate(sum_trees = cumsum(count))
# Trees by district, year
tree_quartier_year_full <- d.trees %>%
dplyr::select(pflanzjahr, quartier, kronendurchmesser) %>%
filter(pflanzjahr > 1980) %>%
group_by(pflanzjahr, quartier) %>%
summarise(count = n(), sum_crown = sum(kronendurchmesser))
# trees by year
tree_year <- d.trees %>%
dplyr::select(pflanzjahr, kronendurchmesser) %>%
filter(pflanzjahr > 1980) %>%
group_by(pflanzjahr) %>%
summarise(tree_count = n(), crown_sum = sum(kronendurchmesser))
tree_year_sum <- tree_year %>%
mutate(cum_trees = cumsum(tree_count)) %>%
mutate(cum_crown = cumsum(crown_sum))
Next, we loaded all the temperature information from the meteo data set. While this data set includes other information such as rain duration we we only use the temperature, as it seems unlikely that the amount of trees significantly impact the rainfall in an area.
filenames.meteo <- list.files(path = "../datasets/meteo/", pattern = "*.csv", full.names = TRUE)
data_list.meteo <- lapply(filenames.meteo, read.csv)
# Combine the data frames in the list into a single data frame
meteo <- do.call(rbind, data_list.meteo)
names(meteo)[1] <- "Date"
meteo$Date <- format(as.Date(meteo$Date), format = "%Y-%m-%d")
# Datensatz mit Temperatur und Globalstrahlung pro Messstation
meteo.extr <- meteo %>%
filter(Parameter == "T" | Parameter == "StrGlo" | Parameter =="T_max_h1")
meteo.extr$Jahr <- year(meteo.extr$Date)
# weiter mit "normalem" Meteodatensatz
meteo <- meteo[meteo$Standort=="Zch_Stampfenbachstrasse",]
meteo <- meteo %>%
select(c("Date","Parameter","Wert")) %>%
pivot_wider(id_cols = "Date",names_from = "Parameter",values_from = "Wert") %>%
select(c("Date","T","RainDur","p"))
meteo$Date <- ymd(meteo$Date)
head(meteo)
Lastly the air quality data was loaded. While there are multiple locations where air quality was measured, not every station measures each variable. The stations also were not all put into operation at the same time.
filenames.air <- list.files(path = "../datasets/air/", pattern = "*.csv", full.names = TRUE)
data_list.air <- lapply(filenames.air, read.csv)
# Combine the data frames in the list into a single data frame
air <- do.call(rbind, data_list.air)
names(air)[1] <- "Date"
air$Date <- as.Date(format(air$Date), "%Y-%m-%d")
# add column Jahr
air$Jahr <- as.numeric(format(air$Date,'%Y'))
head(air)
air.wide <- air %>%
filter(Standort == "Zch_Stampfenbachstrasse") %>%
select(c("Date", "Parameter", "Wert")) %>%
pivot_wider(id_cols = "Date", names_from = "Parameter", values_from = "Wert")
air.short <- air[air$Standort=="Zch_Stampfenbachstrasse",]
air.short <- air.short %>%
select(c("Date", "Parameter", "Wert")) %>%
pivot_wider(id_cols = "Date",names_from = "Parameter",values_from = "Wert")
keep <- c("Date", "CO", "NOx")
air.short <- air.short[keep]
keep <- c("Date", "CO")
air.co <- air.short[keep]
keep <- c("Date", "NOx")
air.NOx <- air.short[keep]
#air.NOx <- air["NOx"] <- log(air["NOx"])
To gain insights from the available information we have created a number of graphical overviews. These already show preliminary results of our analysis.
Fig. 5: Year of planting and crown diameter
The two graphs in figure 5 on the left side show the number of trees planted per year as of 1950. The graph on the left side reflects our data on a yearly basis as we got it from our data set. From the data we gathered that a large number of trees were planted in five-year cycles in the nineties and earlier. To gain a more consistent view, we binned the trees into ten-year periods in the middle bar chart.
Planted trees include both additional trees and replacements. There have been a number of extraordinary environmental events in recent years, such as cyclone Lothar in December 1999 or the heavy snow fall in January 2021 and storm Bernd in July 2021 which damaged more than 2’000 trees on public ground in such a way that they had to be cut down. Replanting of those 2’000 trees will take time until the year 2025. Further information can be found in: https://www.stadt-zuerich.ch/ted/de/index/departement/medien/medienmitteilungen/2021/oktober/211007a.html
The City of Zurich is continuously planting trees on public ground as the awareness that trees are an effective measure to reduce heat in the city has become a common understanding. But if we broaden our view and also take private property into consideration, we get a different picture. Half of the area of the tree crowns is on private ground and those are disappearing in such a pace that the overall population of trees is decreasing as well. (https://www.tagesanzeiger.ch/die-stadt-will-ihre-krone-vergroessern-362720147046)
As a first exploratory data analysis for our temperature data we do not look into the development of temperature in general as we will have a detailed insight in the Analysis chapter, we rather look at the evolution of the maximum and minimum temperature over time.
Fig. 6: Temperature trends of maximum and minimum values
The temperatures we have in our data set are daily means. In the left graph in figure 6 we look at the yearly maximum of daily means and in the middle graph we see the development of the yearly minimum of daily means. Both of them show a trend upwards, the maximum of the mean temperatures nowadays is about two degrees higher than it was in 1983. We observe a temperature rise for the minimum of the mean temperatures of about three degrees. We also have the measurements of the absolute maximum temperature per day which is depicted in the graph on the right hand side, where we look at the yearly maximum of all daily maximums. The trend is upwards as well, with a rise of about two degrees within the analyzed time frame. For all these extreme temperatures we can observe the same pattern.
To get more precise insights on the temperature change per year, we looked into the output of the simple linear model with time and temperature. The summaries below provide the figures. For the maximum of the daily mean, each year the temperature rises by 0.076 degrees. This results in approximately two degrees, as mentioned above, for the past 30 years. For the minimum of the daily mean, the temperature rises by 0.109 degrees per year. The temperature rise of the yearly maximum of the absolute daily temperature shows a very similar increase as the yearly maximum of the mean (0.075 degrees).
summary(lm(meteo.sta$Max ~ meteo.sta$Jahr))$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -125.76239113 52.85228101 -2.379507 0.024132656
## meteo.sta$Jahr 0.07628629 0.02633371 2.896906 0.007100222
summary(lm(meteo.sta.min$Min ~ meteo.sta.min$Jahr))$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -224.4969395 94.83822336 -2.367157 0.02481432
## meteo.sta.min$Jahr 0.1089637 0.04725325 2.305951 0.02845820
summary(lm(meteo.sta.max$Max ~ meteo.sta.max$Jahr))$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -116.29672177 55.29212464 -2.103314 0.04422930
## meteo.sta.max$Jahr 0.07460081 0.02754937 2.707896 0.01123579
Fig. 7: Daily CO and NOx
A first visual inspection of carbon monoxide and nitrogen oxides as illustrated in figure 7 shows a reduction of both CO and NOx, from 1983 up to 2022. The trend line in red shows a significant improvement, especially in the Eighties and early Nineties. It is unlikely that trees are the only factor influencing this improvement. Rather, other factors such as new laws and regulations are likely to have played a major role. In addition, in this time frame, cars were equipped with mandatory catalytic converters, which mainly reduce carbon monoxide, hydrocarbon and nitrogen oxides. Searching the internet for explanations to which we could refer to did not lead to any results, as most time series only start as of 1990. Additional potential influencing factors are mentioned in chapter 1.3.
The same data depicted as boxplots and summarized per year in figure 8 confirms the improvement of air quality as well as the trend and the maximum values.
Fig. 8: CO and NOx per year
Fig. 9: Nitrogen oxides per monitoring station
Nitrogen oxides have been registered at three different measuring stations (figure 9). The values differ as the measuring stations have different settings, for example main traffic axis, 6 m distance to the street (Rosengartenstrasse) or moderately frequented road in residential area, 3 m distance to the street (Schimmelstrasse).
Further details on measuring stations:
Stampfenbachstrasse: https://zueriluft.ch/airmo/frontend/station.php?ID=8
Schimmelstrasse: https://zueriluft.ch/airmo/frontend/station.php?ID=6
Rosengartenstrasse: https://zueriluft.ch/airmo/frontend/station.php?ID=11
The analysis done in the following chapters is based on the measurements at Stampfenbachstrasse as this data goes back as far as 1983.
Having gained an overview of the data, we would now like to analyse the data in more detail using a few different methodologies.
In this section we are trying to see if there is a correlation over time between the amount of trees and the air quality or temperature. For this we use time series analysis, meaning we need to convert our data into time series objects. After transforming them we can then look at the decomposition of the objects. Thus we are able to see trends, seasonality, and residuals. However the seasonality is only visible for air pollution and temperature, as the tree information is only available on a yearly basis.
meteo %<>% complete(Date=seq.Date(min(Date), max(Date), by='day'))
# Use the time series class of the library stats
freq_daily <- 365.2422
temp <-
ts(meteo$T, start=c(year(min(meteo$Date)),yday(min(meteo$Date))),
frequency=freq_daily) %>%
na_replace(fill=0)
# Stationarity test and decomposition
temp_comp=decompose(temp)
plot(temp_comp)
title(sub = "Temperature")
# Manual decomposition
meteo %<>% mutate(year=year(meteo$Date)+yday(meteo$Date)/freq_daily)
temp_trend <- lm(meteo$T~meteo$year)
plot(temp, main="Temperature trend per year")
abline(temp_trend)
# Prepare yearly data
meteo_yr <- meteo %>%
mutate(temp_raw=replace_na(T,0)) %>%
group_by(Year=year(Date)) %>%
filter(Year>=1980 & Year<=2021) %>%
summarize(temp=mean(temp_raw)) %>%
ungroup()
temp_yr <- ts(temp, start=min(meteo_yr$Year))
tb_temp_ts <- tbats(temp_yr)
# Differ
## twice-difference the CO2 data
temp_d2 <- diff(temp, differences = 1)
## difference the differenced CO2 data
temp_d2d12 <- diff(temp_d2, lag = 12)
## plot the newly differenced data
plot(temp_d2d12, main = "Temperature without trend and seasonality")
Fig. 10: Temperature timeseries
Generally, we can see that the temperature is slightly rising over
time. There is a slight upwards trend noticeable and it is also
important to remember how dangerous a temperature increase of just one
percent can be for the biodiversity.
air.short %<>% complete(Date=seq.Date(min(Date), max(Date), by='day'))
# Use the time series class of the library stats
freq_daily <- 365.2422
co <-
ts(air.short$CO, start=c(year(min(air.short$Date)),yday(min(air.short$Date))),
frequency=freq_daily) %>%
na_replace(fill=0)
NOx <-
ts(air.short$NOx, start=c(year(min(air.short$Date)), yday(min(air.short$Date))),
frequency=freq_daily) %>%
na_replace(fill=0)
# Stationarity test and decomposition
# adf.test(co,k=0)
# adf.test(NOx,k=0)
co_comp=decompose(co)
NOx_comp=decompose(NOx)
# Manual decomposition
air.short %<>% mutate(year=year(air.short$Date)+yday(air.short$Date)/freq_daily)
co_trend <- lm(air.short$CO~air.short$year)
NOx_trend <- lm(air.short$NOx~air.short$year)
air_yr <- air.short %>%
mutate(co_raw=replace_na(CO,0), NOx_raw=replace_na(NOx,0)) %>%
group_by(Year=year(Date)) %>%
filter(Year>=1980 & Year<=2021) %>%
summarize(co=sum(co_raw), NOx=mean(NOx_raw)) %>%
ungroup()
# Time series
co_yr <- ts(air_yr$co, start=min(air_yr$Year), frequency=1)
NOx_yr <- ts(air_yr$NOx, start=min(air_yr$Year), frequency=1)
# plot(co_yr)
# plot(NOx_yr)
# Manual decomposition
co_yr_trend <- lm(air_yr$co~air_yr$Year)
plot(co_yr, xlab='Year', ylab='Average co pollution')
abline(co_yr_trend)
title(main = "CO development over the years and trend line")
NOx_yr_trend <- lm(air_yr$NOx~air_yr$Year)
plot(NOx_yr, xlab='Year', ylab='Average NOx pollution')
abline(NOx_yr_trend)
title(main = "NOx development over the years and trend line")
tree_ts <- ts(tree_ts_sum$sum_trees, start=min(tree_ts_sum$pflanzjahr), frequency=1)
tb_tree_ts <- tbats(tree_ts)
tb_co_ts <- tbats(co_yr)
tb_nox_ts <- tbats(NOx_yr)
plot(residuals(tb_co_ts))
title(main = "Residuals of CO")
plot(residuals(tb_nox_ts))
title(main = "Residuals of NOx")
# "Forecast"
# plot(forecast(co_yr))
Fig. 11: Air quality timeseries
The time series analysis of carbon monoxide (CO) and nitrogen oxide
(NOx) show that the they are closely correlated. It is further clear
that they have both decreased drastically since the 1980s in Zurich. It
is unlikely that the whole change can be attributed to the growing
number of trees and green spaces in Zurich. It is more likely that a
variety of factors, including advancement in technologies and changes in
laws and regulations, contributed more to the improvement in air
quality.
# Make the time series comparable
temp_comp_random <- data.frame(Date=time(temp_comp$random), Random=temp_comp$random)
co_comp_random <- data.frame(Date=time(co_comp$random), Random=co_comp$random)
NOx_comp_random <- data.frame(Date=time(NOx_comp$random), Random=NOx_comp$random)
window <- list(start=1980,end=2021)
temp_comp_random %<>% filter(Date>=window$start&Date<window$end)
co_comp_random %<>% filter(Date>=window$start&Date<window$end)
NOx_comp_random %<>% filter(Date>=window$start&Date<window$end)
temp_comp_random_ts <- ts(temp_comp_random$Random, start=c(window$start,1), frequency=freq_daily)
co_comp_random_ts <- ts(co_comp_random$Random, start=c(window$start,1), frequency=freq_daily)
NOx_comp_random_ts <- ts(NOx_comp_random$Random, start=c(window$start,1), frequency=freq_daily)
# Cross correlation function
ccf(residuals(tb_tree_ts), residuals(tb_nox_ts),
lag.max = 300,
main = "Trees - NOx Cross-Correlation Plot",
ylab = "CCF")
ccf(residuals(tb_tree_ts), residuals(tb_co_ts),
lag.max = 300,
main = "Trees - CO Cross-Correlation Plot",
ylab = "CCF")
ccf(residuals(tb_tree_ts), residuals(tb_temp_ts),
lag.max = 300,
main = "Trees - Temperature Cross-Correlation Plot",
ylab = "CCF")
Fig. 12: Correlation timeseries
Now one can see the correlation between the sum of trees and air quality (CO and NOx) as well as the correlation between the sum of trees and temperature. The graphs shows no strong correlations, although a slightly significant correlation with a lag is visible for amount of trees on air quality. Meaning that after some time a larger amount of trees could have an influence in reducing carbon monoxide and nitrogen oxide in the air. To further analyse this, more data from more measuring stations over a greater number of years would be necessary. The time series analysis leads us to the conclusion that the impact of trees might be very localized and shows that nearly no correlation between trees and air quality or temperature is visible in the available data.
To aid us in our geospatial analysis and to potentially communicate some of our findings to a broader public, we have created a Tableau dashboard that acts as a prototype. Not all visualizations that we have explored made it into the prototype, and we only kept what might provide an added benefit to the rest of the analysis presented here. We have kept three panels in the dashboard (or rather Tableau “story”).
The first visualization shows the cumulative development of new trees planted by Grün Stadt Zürich since 1983. For the second visualization, we only kept the districts where we also had temperature measurement stations. In addition to the number of trees planted (shaded in green), we contrasted the average temperature (blue circles). With this visualizations the user can explore the slight temperature differences between the districts. In the third visualization, we included our secondary topic of interest, which is air quality. Here we contrasted the development of NOx levels and temperature.
Below you can find a screenshot of one of the visualizations in our dashboard. To explore the full interactive dashboard, please follow the following link: https://public.tableau.com/views/TreesTreesTrees/Story1 .
Figure 13: Tableau screenshot
For the dashboard, some additional data wrangling was done. Furthermore the data set had to be expanded and missing values needed to be added to create a smoother dashboard experience.
Based on our data, there is no correlation between the number of trees planted in a given district in the city of Zurich and the temperature on a macro scale. The same is true for the time series analysis between number of trees and the air quality. It is likely that there are too many additional factors outside of our available data that influence it. The data also shows that it is very probable that the cooling effect of trees is very local and that no measurable impact can be detected if they are too far away from the measuring station. While we did not find any correlation for our primary research question, our analysis nonetheless yielded some interesting insights. Firstly, the main insight is that the warming of the city, as measured with our selected temperature measurement stations, was not significantly slowed down by the planting of trees. To check whether this statement is explicitly true, however, one would also have to simulate the development if less, or no additional trees at all, had been planted. Secondly, we saw that the city of Zurich started with some more consistent tree planting across all districts in the early 2000’s, whereas before, individual districts were targeted more specifically. Thirdly, to end on a positive note, there has been a clear improvement in various air quality indicators, especially NO. However, even if there is a slight correlation with the increase of planted trees, this correlation would have to be treated as spurious, as factors such as the introduction of the catalytic converter or other regulatory measures are more than likely to have had much a larger impact in this area.
While we did manage to get some very insightful and interesting
results, we did also come across some issues, mostly with the data
availability and quality. It would be useful to collect more data from
the different districts in Zurich. It would also be helpful if that data
would be completely available across a time-frame of at least 20 years.
This would allow for creating a more complete picture and better
comparisons among districts. Another possibility would be take a closer
look at some of the outliers using Extreme Value Theory (EVT). A further
approach would be to create a simulation. While this would obviously
involve a lot more effort, it would allow to simulate potential
scenarios and could thus help city planners and politicians make more
informed policy decisions.
Additionally, further research questions could evaluate the temperature
on both a micro and macro scale. Especially interesting would be an
evaluation to calculate or simulate the amount of trees that would need
to be planted to reach a tipping point that makes the efforts observable
on a macro level. In our opinion, it would be useful to not only include
trees, as our research did, but also plants on facades and rooftops.
Furthermore, the study should be controlled against the disappearance of
undeveloped land in favour of urban spread.